home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
OTHER_LA
/
QUINTA
/
MSGRESP_.C
< prev
next >
Wrap
Text File
|
1990-08-16
|
8KB
|
354 lines
/*
* Quinta ⌐ 1990 Eric W. Sink
*
* Responses for classes: Message, Response
*
*/
#include "Q_includes.h"
/*--------------------------------------------------------------------*/
int setcode_ptr_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
long x;
x = popint();
r = popresp();
(**r).code = (int (*) ()) x;
}
/*--------------------------------------------------------------------*/
int getcode_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
r = popresp();
newintnum((long) (**r).code);
toptr2_integer_lang(NULL);
}
/*--------------------------------------------------------------------*/
int compileit_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
r = popresp();
MemCompile(r);
}
/*--------------------------------------------------------------------*/
int uncompileit_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
r = popresp();
if (GetPtrSize((Ptr) (**r).code))
{
DisposPtr((Ptr) (**r).code);
}
(**r).code = RespSend;
}
/*--------------------------------------------------------------------*/
int getblock_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
ObjectHandle b;
r = popresp();
b = new_object(block_cp);
(**b).data = (**r).numparms;
(**b).members = (ObjectHandle **) (**r).parms;
push(b);
}
/*--------------------------------------------------------------------*/
int msg_response_lang(blockparm)
MessageHandle **blockparm;
{
ResponseHandle r;
r = popresp();
pushmessage((**r).message);
}
/*--------------------------------------------------------------------*/
int execute_response_lang(blockparm)
MessageHandle **blockparm;
{
execute(popresp());
}
/*--------------------------------------------------------------------*/
int comment_message_string_lang(blockparm)
MessageHandle **blockparm;
{
QStr str;
MessageHandle msg;
msg = popmsg();
str = popstr();
if (((**msg).comment))
{
DropHandle((void **) ((**msg).comment));
}
(**msg).comment = str;
}
/*--------------------------------------------------------------------*/
int tostr_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle msg;
msg = popmsg();
newQstring((**msg).name);
}
/*--------------------------------------------------------------------*/
int send_message_lang(blockparm)
MessageHandle **blockparm;
{
SendMessageM(popmsg());
}
/*--------------------------------------------------------------------*/
int stopwatch_message_lang(blockparm)
MessageHandle **blockparm;
{
register MessageHandle x;
register long time1;
register long time2;
x = popmsg();
time1 = TickCount();
SendMessageM(x);
time2 = TickCount();
newfloatnum((FPTYPE) (time2 - time1) / 60);
OutputCString(" ; ");
SendMessage(">str");
newQstringp(" seconds");
SendMessage("+");
SendMessage("print");
OutputLn();
}
/*--------------------------------------------------------------------*/
int searchlength_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle b;
b = popmsg();
newintnum((**b).TableIndex - Hash1((**b).name));
}
/*--------------------------------------------------------------------*/
int purge_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle b;
b = popmsg();
killmessage((**b).name);
}
/*--------------------------------------------------------------------*/
int order_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle b;
b = popmsg();
newintnum((long) (**b).order);
}
/*--------------------------------------------------------------------*/
int print_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle b;
ClassHandle c;
long index;
long ndx;
b = popmsg();
if (b)
{
OutputLn();
OutputCString(" ; '");
OutputCStringH((**b).name);
OutputCString("': ");
OutputCString(" order: ");
OutputLong((**b).order);
OutputCString(" ; # responses: ");
OutputLong((long) (**b).RespCount);
OutputLn();
if ((**b).comment)
{
OutputCString(" ; ");
OutputCStringH((**b).comment);
OutputLn();
}
OutputCString(" ; Responders: ");
OutputLn();
if ((**b).responselist)
{
PrintResps((**b).responselist);
}
else if ((**b).single)
{
OutputSet((**((**b).single)).HomesIndex, (**b).order);
}
}
}
/*--------------------------------------------------------------------*/
int PrintResps(root)
RespTagHandle root;
{
long ndx;
MessageHandle b;
if ((**root).left)
{
PrintResps((**root).left);
}
ndx = (**root).index;
b = (**((**root).r)).message;
if (!Inherited1(b, ndx))
{
OutputCString(" ");
OutputSet(ndx, (**b).order);
OutputLn();
}
if ((**root).right)
{
PrintResps((**root).right);
}
}
/*--------------------------------------------------------------------*/
int PushResponses(tree)
RespTagHandle tree;
{
register ResponseHandle resp;
register int count;
count = 0;
if ((**tree).left)
{
count += PushResponses((**tree).left);
}
if ((**tree).right)
{
count += PushResponses((**tree).right);
}
resp = (**tree).r;
if (!Inherited1((**resp).message, (**tree).index))
{
pushnewresponse((**tree).r);
count++;
}
return count;
}
/*--------------------------------------------------------------------*/
int responses_message_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle b;
ClassHandle c;
ResponseHandle r;
long ndx;
long numr;
b = popmsg();
if (b)
{
if ((**b).single) {
numr = 1;
pushnewresponse((**b).single);
}
else if ((**b).responselist) {
numr = PushResponses((**b).responselist);
}
newintnum(numr);
SendMessage(">list");
}
}
/*--------------------------------------------------------------------*/
int print_response_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle msg;
ResponseHandle resp;
QInt np;
long index;
resp = popresp();
if ((**resp).code == RespSend)
{
OutputLn();
OutputCString(" ; User defined Response: ");
if ((**resp).message)
{
OutputCStringH((**((**resp).message)).name);
}
else
{
OutputCString("BLD");
}
OutputCString(" of class: ");
OutputCStringH((**((*ClassTable)[digit((**resp).HomesIndex, 0)])).name);
OutputLn();
OutputCString("[ ");
np = 0;
while (np < (**resp).numparms)
{
msg = ((*((**((ResponseHandle) resp)).parms)))[np++];
if (msg == literal_mp)
{
OutputCStringH((QStr) ((*((**((ResponseHandle) resp)).parms)))[np++]);
OutputCString(" ");
}
else if (msg)
{
OutputCStringH((**msg).name);
OutputCString(" ");
}
}
if ((**resp).message)
{
OutputCString(" ] \r \"");
OutputCStringH((**((**resp).message)).name);
OutputCString("\" ");
if ((**resp).status & PRIVATE_MASK)
{
OutputCString("priv ");
}
else
{
OutputCString("pub ");
}
index = 0;
while (index < ((**((**resp).message)).order))
{
OutputCStringH((**((*ClassTable)[digit((**resp).HomesIndex, index)])).name);
OutputCString(" ");
index++;
}
OutputLong(index);
OutputCString(" >list respond");
OutputLn();
}
else
{
OutputCString("BLD");
}
}
else
{
OutputLn();
OutputCString(" ; ");
OutputCStringH((**((**resp).message)).name);
OutputCString(" response CODE Addr = ");
OutputLong((long) (**resp).code);
OutputLn();
}
}
/*--------------------------------------------------------------------*/
int home_response_lang(blockparm)
MessageHandle **blockparm;
{
MessageHandle msg;
ResponseHandle resp;
QInt np;
long index;
resp = popresp();
index = 0;
while (index < ((**((**resp).message)).order))
{
push_class(((*ClassTable)[digit((**resp).HomesIndex, index)]));
index++;
}
newintnum(index);
SendMessage(">list");
}
/*--------------------------------------------------------------------*/